/**
 * 
 */
package de.uni_leipzig.informatik.asv.unsupervised_pos_tagger.model;
import java.io.BufferedWriter;
import java.io.IOException;
import de.uni_leipzig.informatik.asv.unsupervised_pos_tagger.data.Word;
import de.uni_leipzig.informatik.asv.util.MixingIterator;
/**
 * 
 * @author Christoph Teichmann
 * created May 29, 2014 10:19:52 PM
 * @version 0.1
 */
public interface Model extends Iterable<Word>
{
	/**
	 * 
	 *
	 * @param br
	 * @throws IOException
	 */
	public void writeOutTags(BufferedWriter bw) throws IOException;
	/**
	 *
	 * @param w
	 * @return
	 */
	boolean isInitialized(Word w);
	/**
	 *
	 * @param w
	 * @return
	 */
	int getNumberOfLabels(Word w);
	/**
	 *
	 * @param w
	 * @return
	 */
	double makeLogProbability(Word w, int choice);
	/**
	 *
	 * @param w
	 * @param choice
	 * @param d 
	 */
	void setTag(Word w, int choice);
	/**
	 *
	 * @return
	 */
	MixingIterator<Word> mIterator();
	/**
	 *
	 * @return
	 */
	double makeLogLikelihood();
	/**
	 * 
	 * @param w
	 */
	public void initialize();
	/**
	 * 
	 * @param w
	 * @return
	 */
	public int getTag(Word w);
}